﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ProjControleBLL;
using ProjControleModelos;

namespace ProjControle
{
    public partial class frm_cadastro_cliente : Form
    {
       
        String tipo_controle,controle = "";
        public frm_cadastro_cliente()
        {
            InitializeComponent();
        }

        #region Métodos
        public void alterar()
        {
            tbNome.Enabled = true;
            tbEndereco.Enabled = true;
            tbNum.Enabled = true;
            tbEmail.Enabled = true;
            tbTelefone.Enabled = true;
            tbBairro.Enabled = true;
            tbCelular.Enabled = true;
            tbCEP.Enabled = true;
            tbCidade.Enabled = true;
            dtCadastro.Enabled = true;
            dtNascimento.Enabled = true;
            rtbObservacao.Enabled = true;
            gbTipo.Enabled = true;
            if (cbTipo.SelectedIndex == 0)
            {
                tbCPF.Enabled = true;
                tbRG.Enabled = true;
            }
            else
            {
                tbCNPJ.Enabled = true;
                tbIE.Enabled = true;
            }
                gbLocalizar.Enabled = false;
            cbUF.Enabled = true;
            cbStatus.Enabled = true;
            tipo_controle = "A";
            //botoes
            bSalvar.Enabled = true;
            bCancelar.Enabled = true;
            bVoltar.Enabled = false;
            bExcluir.Enabled = false;
            bAlterar.Enabled = false;
            bIncluir.Enabled = false;
            cbTipo.Focus();
        }
        public void inserir()
        {
            tbNome.Enabled = true;
            tbEndereco.Enabled = true;
            tbNum.Enabled = true;
            tbEmail.Enabled = true;
            tbTelefone.Enabled = true;
            tbBairro.Enabled = true;
            tbCelular.Enabled = true;
            tbCEP.Enabled = true;
            tbCidade.Enabled = true;
            dtCadastro.Enabled = true;
            dtNascimento.Enabled = true;
            rtbObservacao.Enabled = true;
            gbTipo.Enabled = true;
            tbCPF.Enabled = false;
            tbRG.Enabled = false;
            tbCNPJ.Enabled = false;
            tbIE.Enabled = false;
            gbLocalizar.Enabled = false;
            cbUF.Enabled = true;
            cbStatus.Enabled = true;
            tipo_controle = "I";
            //botoes
            bSalvar.Enabled = true;
            bCancelar.Enabled = true;
            bVoltar.Enabled = false;
            bExcluir.Enabled = false;
            bAlterar.Enabled = false;
            bIncluir.Enabled = false;
            cbTipo.Focus();
            
        }
        public void load_frm()
        {
            tbNome.Enabled = false;
            tbEndereco.Enabled = false;
            tbNum.Enabled = false;
            tbEmail.Enabled = false;
            tbTelefone.Enabled = false;
            tbBairro.Enabled = false;
            tbCelular.Enabled = false;
            tbCEP.Enabled = false;
            tbCidade.Enabled = false;
            dtCadastro.Enabled = false;
            dtNascimento.Enabled = false;
            rtbObservacao.Enabled = false;
            gbTipo.Enabled = false;
            //botoes
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bCancelar.Enabled = false;
            bSalvar.Enabled = false;
            associaGrid();
        }
        public void limpar()
        {
            tbBairro.Text = "";
            tbBairro.Enabled = false;
            tbCelular.Text = "";
            tbCelular.Enabled = false;
            tbCEP.Text = "";
            tbCEP.Enabled = false;
            tbCidade.Text = "";
            tbCidade.Enabled = false;
            tbCNPJ.Text = "";
            tbCodigo.Text = "";
            tbCodigo.Enabled = false;
            tbCPF.Text = "";
            tbEmail.Text = "";
            tbEmail.Enabled = false;
            tbEndereco.Text = "";
            tbEndereco.Enabled = false;
            tbIE.Text = "";
            tbLocalizar.Text = "";
            tbNome.Text = "";
            tbNome.Enabled = false;
            tbNum.Text = "";
            tbNum.Enabled = false;
            tbRG.Text = "";
            tbTelefone.Text = "";
            tbTelefone.Enabled = false;
            cbStatus.SelectedIndex = -1;
            cbStatus.Enabled = false;
            cbUF.SelectedIndex = -1;
            cbUF.Enabled = false;
            cbTipo.SelectedIndex = -1;
            gbTipo.Enabled = false;
            gbLocalizar.Enabled = true;
            dtCadastro.Value = DateTime.Now;
            dtCadastro.Enabled = false;
            dtNascimento.Text = "";
            dtNascimento.Enabled = false;
            rtbObservacao.Text = "";
            rtbObservacao.Enabled = false;
            //botoes
            bIncluir.Enabled = true;
            bAlterar.Enabled = false;
            bExcluir.Enabled = false;
            bSalvar.Enabled = false;
            bVoltar.Enabled = true;
            controle = "";
            tipo_controle = "";

            dgClientes.DataSource = null;
            associaGrid();
        }
        public void associaGrid()
        {
            DataTable tab;
            try
            {
                tab = new DataTable();
                tab.Columns.Add("cod_cliente");
                tab.Columns.Add("nome_cliente");
                dgClientes.DataSource = tab;
                dgClientes.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgClientes.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
                dgClientes.AllowUserToAddRows = false;
                dgClientes.AllowUserToResizeRows = false;
                dgClientes.AllowUserToResizeColumns = false;
                dgClientes.Columns["cod_cliente"].HeaderText = "Código";
                dgClientes.Columns["cod_cliente"].Width = 70;
                dgClientes.Columns["nome_cliente"].HeaderText = "Nome";
                dgClientes.Columns["nome_cliente"].Width = 250;
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public Cliente carregaPropriedades()
        {
            Cliente objC = new Cliente();
            if (controle == "F")
            {
                objC.cpf = tbCPF.Text;
                objC.rg = tbRG.Text;
                objC.cnpj = "";
                objC.insc_estadual = "";
            }
            else
            {
                objC.cpf = "";
                objC.rg = "";
                objC.cnpj = tbCNPJ.Text;
                objC.insc_estadual = tbIE.Text;
            }
            if (tbCodigo.Text == "")
                objC.codigo = 0;
            else
                objC.codigo = int.Parse(tbCodigo.Text);
            objC.nome = tbNome.Text;
            objC.endereco = tbEndereco.Text;
            objC.num_casa = tbNum.Text.ToString();
            objC.bairro = tbBairro.Text;
            objC.cidade = tbCidade.Text;
            objC.estado = cbUF.SelectedItem.ToString();
            objC.status = cbStatus.SelectedItem.ToString();
            objC.dt_nascimento = dtNascimento.Value;
            objC.dt_cadastro = dtCadastro.Value;
            objC.telefone = tbTelefone.Text;
            objC.celular = tbCelular.Text;
            objC.observacao = rtbObservacao.Text.ToString();
            objC.email = tbEmail.Text;
            objC.cep = tbCEP.Text;
            return objC;
        }
        public void carregaCampos(Cliente objC)
        {
            try
            {
                tbCodigo.Text = objC.codigo.ToString();
                tbBairro.Text = objC.bairro;
                tbCelular.Text = objC.celular.ToString();
                tbTelefone.Text = objC.telefone.ToString();
                tbCEP.Text = objC.cep.ToString();
                tbCidade.Text = objC.cidade;
                if (objC.cnpj == "" && objC.insc_estadual == "")
                {
                    tbCNPJ.Text = "";
                    tbIE.Text = "";
                    tbCPF.Text = objC.cpf.ToString();
                    tbRG.Text = objC.rg.ToString();
                    cbTipo.SelectedIndex = 0;
                }
                else
                {
                    tbIE.Text = objC.insc_estadual.ToString();
                    tbCNPJ.Text = objC.cnpj.ToString();
                    tbCPF.Text = "";
                    tbRG.Text = "";
                    cbTipo.SelectedIndex = 1;
                }
                tbEmail.Text = objC.email;
                tbEndereco.Text = objC.endereco;
                tbNome.Text = objC.nome;
                rtbObservacao.Text = objC.observacao.ToString();
                cbStatus.SelectedItem = objC.status.ToString();
                cbUF.SelectedItem = objC.estado.ToString();
                tbNum.Text = objC.num_casa.ToString();
                dtCadastro.Value = objC.dt_cadastro;
                dtNascimento.Value = objC.dt_nascimento;
                

            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
        }
        public void func_insere()
        {
            ClienteBLL objBLL = null;
            Cliente objC = null;
            try
            {
                objC = carregaPropriedades();
            objBLL = new ClienteBLL();
            if (tipo_controle == "I")
                objBLL.inserir(objC);
            else
                objBLL.alterar(objC);

            MessageBox.Show("Salvo com Sucesso!", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Information);
            limpar();
            }
            catch (Exception ex)
            {
                
                MessageBox.Show(ex.Message);
            }
        }
        #endregion

        private void cbTipo_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cbTipo.SelectedIndex)
            {
                case 0:
                    tbCPF.Enabled = true;
                    tbRG.Enabled = true;
                    tbCNPJ.Enabled = false;
                    tbIE.Enabled = false;
                    controle = "F";
                    tbCNPJ.Text = "";
                    tbIE.Text = "";
                    break;
                case 1:
                    tbCPF.Enabled = false;
                    tbRG.Enabled = false;
                    tbCNPJ.Enabled = true;
                    tbIE.Enabled = true;
                    controle = "J";
                    tbRG.Text = "";
                    tbCPF.Text = "";
                  
                    break;
            }
        }

        private void bIncluir_Click(object sender, EventArgs e)
        {
            inserir();
        }

        private void frm_cadastro_cliente_Load(object sender, EventArgs e)
        {
            load_frm();
        }

        private void bCancelar_Click(object sender, EventArgs e)
        {
            limpar();
        }

        private void bVoltar_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void bSalvar_Click(object sender, EventArgs e)
        {
            Valida_CPF_CNPJ objValida;
            Boolean ret;
           
            try
            {
                if (controle != "")
                {
                    if (controle == "F")
                    {
                        objValida = new Valida_CPF_CNPJ();
                        ret = objValida.ValidaCPF(tbCPF.Text);
                        if (ret == true)
                        {
                            func_insere();
                        }
                        else
                        {
                            MessageBox.Show("CPF Invalido", "Valida CPF",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                            tbCPF.Focus();
                        }
                    }
                    else
                    {
                        objValida = new Valida_CPF_CNPJ();
                        ret = objValida.ValidaCnpj(tbCNPJ.Text);
                        if (ret == true)
                            func_insere();
                        else
                        {
                            MessageBox.Show("CNPJ Invalido", "Valida CNPJ", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            tbCNPJ.Focus();
                        }
                    }
                }
                else
                    MessageBox.Show("Informe o Tipo de Pessoa: Física/Jurídica","Mensagem",MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
                 
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }

        }

        private void tbLocalizar_KeyPress(object sender, KeyPressEventArgs e)
        {
            ClienteBLL objBLL;
            if (e.KeyChar == Convert.ToChar(Keys.Space))
            {
                try
                {
                    DataTable tab;
                    objBLL = new ClienteBLL();
                    tab = objBLL.localizar(tbLocalizar.Text.Trim());
                    if (tab.Rows.Count > 0)
                    {
                        dgClientes.DataSource = tab;
                        for (int i = 2; i < dgClientes.Columns.Count; i++)
                            dgClientes.Columns[i].Visible = false;
                    }
                    else
                        MessageBox.Show("Registro(s) não Encontrado(s)!", "Clientes", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
                catch (Exception ex)
                {

                    MessageBox.Show(ex.Message);
                }
            }
        }

        private void dgClientes_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            int codigo = 0;
            ClienteBLL objBLL = null;
            Cliente objC = null;
            try
            {
                codigo = int.Parse(dgClientes.Rows[e.RowIndex].Cells[0].Value.ToString());
                if(codigo != 0)
                {
                    bAlterar.Enabled = true;
                    bExcluir.Enabled = true;
                    bIncluir.Enabled = false;
                    bCancelar.Enabled = true;
                    objBLL = new ClienteBLL();
                    objC = objBLL.localizar(codigo);
                    if (objC.codigo != 0)
                    {
                        carregaCampos(objC);
                    }
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }

        }

        private void bAlterar_Click(object sender, EventArgs e)
        {
            alterar();
        }

        private void bExcluir_Click(object sender, EventArgs e)
        {
            ClienteBLL objBLL = null;
            Cliente objC = null;
            try
            {
                if (MessageBox.Show("Deseja Excluir?", "Mensagem", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == System.Windows.Forms.DialogResult.Yes)
                {
                    objBLL = new ClienteBLL();
                    objC = carregaPropriedades();
                    objBLL.excluir(objC);
                    MessageBox.Show("Excluido com Sucesso", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    limpar();
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message);
            }
            objBLL = null;
            objC = null;
        }


    }   
}
